package com.blue.base.common.constants;

/**
 * 系统常量
 *
 * @author liulei
 * @version 1.0
 */
public interface UserConstants {

    /**
     * 管理员角色的名字
     */
    String ADMIN_NAME = "administrator";

    /**
     * 管理员id
     */
    Long ADMIN_ID = 1L;

    /**
     * 超级管理员角色id
     */
    Long ADMIN_ROLE_ID = 1L;

    /**
     * 默认密码前缀
     */
    String DEFAULT_PASSWORD = "pwd123456";

    /**
     * 主体拥有角色类型的最大值
     */
    int OWN_ROLES_MAX_VALUE = 3;

    /**
     * 主体拥有职位信息的最大值
     */
    int OWN_POSITION_MAX_VALUE = 3;

    /**
     * 主体拥有部门个数的最大值
     */
    int OWN_DEPT_MAX_VALUE = 3;

    /**
     * 根节点ROOT的PID都规定为0开始
     */
    int TREE_ROOT_PID_ZERO = 0;

    /**
     * 密码加密盐长度
     */
    int PASSWORD_SALT_LENGTH = 8;

    /**
     * 用户信息存储redis默认一天
     */
    int USER_INFO_EXPIRED = 60 * 60 * 24;

    /**
     * 菜单的pcodes拼接码[pcodes的存在，是为了sql递归查询而设]
     */
    String MENU_PARENT_CODES_APPEND_RULE = "%s[%s],";

    /**
     * 用户登录后的权限信息Redis存储Key名称
     */
    String USER_LOGIN_AUTH_KEY = "com:blue:user:auth:";

    /**
     * 用户一段时间内的登录次数key
     */
    String USER_LOGIN_TIMES_KEY = USER_LOGIN_AUTH_KEY + "times:";

    /**
     * 用户一段时间内的登录次数
     */
    int USER_LOGIN_TIMES_LIMIT = 3;

    /**
     * 多少时间内频繁输入错密码算频繁操作定义30分钟
     */
    int USER_LOGIN_DEFINE_FREQUENCY = 30;

    /**
     * 获取用户redis key值
     *
     * @param account 账户
     * @return key
     */
    static String getUserRedisKey(String account) {
        return USER_LOGIN_AUTH_KEY + account;
    }
}
